import $ from "jquery";
export default class MUtil {
  request(param){
    return new Promise((resolve,reject) => {
      $.ajax({
        type     : param.type     || 'post',
        url      : param.url      || '',
        dataType : param.dataType || 'json',
        data     : param.data     || null,
        success  : (res) => {
          // 数据请求成功
          if(0 === res.status) {
            typeof resolve === 'function' && resolve(res.data, res.msg)
          }
          // 没有登录状态，强制转到登录页
          else if(10 === res.status) {
            this.doLogin();
          }
          else {
            typeof reject === 'function' && reject(res.msg || res.data)
          }
        },
        error   : (err) => {
          typeof reject === 'fuction' && reject(err.statusText)
        }
      });
    });
  }
  doLogin() {
    // encodeURIComponent对特殊字符做处理
    window.location.href = '/login?redirect=' + encodeURIComponent(window.location.pathname); 
  }
  // 获取url参数
  getUrlParam(name) {
    let queryString = window.location.search.split('?')[1] || '', // 取出url里的参数
        reg = new RegExp("(^|&)" + name + "=([^&]*)(&$)"),
        result = queryString.match(reg);
    // result: ['param=123', '', '123', '&']
    return result ? decodeURIComponent(result[2]) : null;
  }
  // 成功提示
  successTips(successMsg) {
    alert(successMsg || '操作成功');
  }
  // 错误提示
  errorTips(errMsg) {
    alert(errMsg || '好像哪里出错了');
  }
  // 存储
  setStorage(name, data) {
    let dataType = typeof data;
    // json 对象
    if ( dataType === 'object') {
      window.localStorage.setItem(name, JSON.stringify(data));
    }
    // 基础类型
    else if (['number', 'string', 'boolean'].indexOf(dataType)) {
      window.localStorage.setItem(name, data);
    }
    // 其他不支持的类型
    else {
      alert('该类型不能用于本地存储');
    }
  }
  // 取出本地存储内容
  getStorage(name) {
    let data = window.localStorage.getItem(name);
    if(data) {
      return JSON.parse(data);
    }
    else {
      return ''
    }
  }
  // 删除本地存储
  removeStorage(name) {
    window.localStorage.removeItem(name);
  }
}

